import {contextBridge, ipcRenderer} from 'electron'

// 是否是开发模式
const isDev = process.env.NODE_ENV === 'development' || !!process.env.VITE_DEV_SERVER_URL

// Expose protected APIs to renderer process
contextBridge.exposeInMainWorld('elec', {
  // App control
  minimize: () => ipcRenderer.send('app:minimize'),
  maximize: () => ipcRenderer.send('app:maximize'),
  close: () => ipcRenderer.send('app:close'),

  // Open external links in browser
  openExternal: (url: string) => {
    ipcRenderer.send('open:external', url)
  },

  // System info
  versions: {
    node: process.versions.node,
    chrome: process.versions.chrome,
    electron: process.versions.electron
  },

  // 数据库操作API
  db: {
    // 用户相关操作
    user: {
      // 获取用户列表
      list: (page: number = 1, pageSize: number = 10, condition: any = {}) =>
        ipcRenderer.invoke('db:user:list', page, pageSize, condition),

      // 获取单个用户
      get: (id: number) =>
        ipcRenderer.invoke('db:user:get', id),

      // 创建用户
      create: (userData: any) =>
        ipcRenderer.invoke('db:user:create', userData),

      // 更新用户
      update: (userData: any) =>
        ipcRenderer.invoke('db:user:update', userData),

      // 删除用户
      delete: (id: number) =>
        ipcRenderer.invoke('db:user:delete', id),

      // 搜索用户
      search: (keyword: string, page: number = 1, pageSize: number = 10) =>
        ipcRenderer.invoke('db:user:search', keyword, page, pageSize)
    },

    // 数据库管理相关操作
    info: {
      // 获取数据库文件信息
      file: () => ipcRenderer.invoke('db:info:file')
    },

    // 通用数据库操作
    query: (sql: string, params: any[] = []) =>
      ipcRenderer.invoke('db:query', sql, params),

    execute: (sql: string, params: any[] = []) =>
      ipcRenderer.invoke('db:execute', sql, params)
  },

  // 开发调试功能
  dev: {
    // 是否是开发模式
    isDev,
    // 打印进程环境变量（仅开发模式可用）
    logEnv: isDev ? () => console.log(process.env) : () => {},
    // 重新加载窗口
    reload: () => {
      if(isDev) {
        ipcRenderer.send('dev:reload')
      }
    },
    // 打开或关闭开发者工具
    toggleDevTools: () => {
      if(isDev) {
        ipcRenderer.send('dev:toggleDevTools')
      }
    }
  }
})
